home *** CD-ROM | disk | FTP | other *** search
/ Scene 96 / Scene 96 International Edition (Zyklop Software) (Disc 2) (1997).iso / misc / coding / midas060 / samples / midp_dos / vga.h < prev   
Encoding:
C/C++ Source or Header  |  1995-05-23  |  3.5 KB  |  169 lines

  1. /*      VGA.H
  2.  *
  3.  * VGA hardware level routines for standard 320x200x256 mode
  4.  *
  5.  * Copyright 1995 Petteri Kangaslampi
  6. */
  7.  
  8. #ifndef __VGA_H
  9. #define __VGA_H
  10.  
  11.  
  12. #ifdef __386__
  13.  
  14. void vgaSetMode(int mode);
  15. #pragma aux vgaSetMode = \
  16.     "xor    ah,ah" \
  17.     "int    10h" \
  18.     parm [eax] \
  19.     modify exact [eax];
  20.  
  21. void vgaClearScreen(uchar *buffer);
  22. #pragma aux vgaClearScreen = \
  23.     "mov    ecx,16000" \
  24.     "cld" \
  25.     "xor    eax,eax" \
  26.     "rep    stosd" \
  27.     parm [edi] \
  28.     modify exact [eax ecx edi];
  29.  
  30. void vgaCopyScreen(uchar *buffer, uchar *dest);
  31. #pragma aux vgaCopyScreen = \
  32.     "mov    ecx,16000" \
  33.     "cld" \
  34.     "rep    movsd" \
  35.     parm [esi] [edi] \
  36.     modify exact [ecx esi edi];
  37.  
  38. void vgaPutPixel(uchar *buffer, int x, int y, int color);
  39. #pragma aux vgaPutPixel = \
  40.     "cmp    eax,319" \
  41.     "ja     clip" \
  42.     "cmp    ebx,199" \
  43.     "ja     clip" \
  44.     "imul   ebx,320" \
  45.     "add    ebx,eax" \
  46.     "mov    [edi+ebx],cl" \
  47.     "clip:" \
  48.     parm [edi] [eax] [ebx] [ecx] \
  49.     modify exact [ebx];
  50.  
  51. void vgaWaitVR(void);
  52. #pragma aux vgaWaitVR = \
  53.     "mov    dx,03DAh" \
  54.     "vr:" \
  55.     "in     al,dx" \
  56.     "test   al,8" \
  57.     "jz     vr" \
  58.     modify exact [eax edx];
  59.  
  60. void vgaWaitNoVR(void);
  61. #pragma aux vgaWaitNoVR = \
  62.     "mov    dx,03DAh" \
  63.     "nvr:" \
  64.     "in     al,dx" \
  65.     "test   al,8" \
  66.     "jnz    nvr" \
  67.     modify exact [eax edx];
  68.  
  69. void vgaWaitDE(void);
  70. #pragma aux vgaWaitDE = \
  71.     "mov    dx,03DAh" \
  72.     "de:" \
  73.     "in     al,dx" \
  74.     "test   al,1" \
  75.     "jnz    de" \
  76.     modify exact [eax edx];
  77.  
  78. void vgaSetBorder(int color);
  79. #pragma aux vgaSetBorder = \
  80.     "mov    dx,03DAh" \
  81.     "in     al,dx" \
  82.     "mov    dx,03C0h" \
  83.     "mov    al,31h" \
  84.     "out    dx,al" \
  85.     "mov    al,bl" \
  86.     "out    dx,al" \
  87.     parm [ebx] \
  88.     modify exact [eax edx];
  89.  
  90. void vgaSetRGB(int color, int r, int g, int b);
  91. #pragma aux vgaSetRGB = \
  92.     "mov    dx,03C8h" \
  93.     "out    dx,al" \
  94.     "inc    dx" \
  95.     "mov    al,bl" \
  96.     "out    dx,al" \
  97.     "mov    al,cl" \
  98.     "out    dx,al" \
  99.     "mov    eax,esi" \
  100.     "out    dx,al" \
  101.     parm    [eax] [ebx] [ecx] [esi] \
  102.     modify exact [eax edx];
  103.  
  104.  
  105. #else
  106.  
  107. void vgaSetMode(int mode);
  108. #pragma aux vgaSetMode = \
  109.     "xor    ah,ah" \
  110.     "int    10h" \
  111.     parm [ax] \
  112.     modify exact [ax];
  113.  
  114. void vgaWaitVR(void);
  115. #pragma aux vgaWaitVR = \
  116.     "mov    dx,03DAh" \
  117.     "vr:" \
  118.     "in     al,dx" \
  119.     "test   al,8" \
  120.     "jz     vr" \
  121.     modify exact [ax dx];
  122.  
  123. void vgaWaitNoVR(void);
  124. #pragma aux vgaWaitNoVR = \
  125.     "mov    dx,03DAh" \
  126.     "nvr:" \
  127.     "in     al,dx" \
  128.     "test   al,8" \
  129.     "jnz    nvr" \
  130.     modify exact [ax dx];
  131.  
  132. void vgaWaitDE(void);
  133. #pragma aux vgaWaitDE = \
  134.     "mov    dx,03DAh" \
  135.     "de:" \
  136.     "in     al,dx" \
  137.     "test   al,1" \
  138.     "jnz    de" \
  139.     modify exact [ax dx];
  140.  
  141. void vgaSetBorder(int color);
  142. #pragma aux vgaSetBorder = \
  143.     "mov    dx,03DAh" \
  144.     "in     al,dx" \
  145.     "mov    dx,03C0h" \
  146.     "mov    al,31h" \
  147.     "out    dx,al" \
  148.     "mov    al,bl" \
  149.     "out    dx,al" \
  150.     parm [bx] \
  151.     modify exact [ax dx];
  152.  
  153. void vgaSetRGB(int color, int r, int g, int b);
  154. #pragma aux vgaSetRGB = \
  155.     "mov    dx,03C8h" \
  156.     "out    dx,al" \
  157.     "inc    dx" \
  158.     "mov    al,bl" \
  159.     "out    dx,al" \
  160.     "mov    al,cl" \
  161.     "out    dx,al" \
  162.     "mov    ax,si" \
  163.     "out    dx,al" \
  164.     parm    [ax] [bx] [cx] [si] \
  165.     modify exact [ax dx];
  166. #endif
  167.  
  168. #endif
  169.